import { Node, Widget } from 'cc';

/**
 * Cocos Creator Widget组件相关拓展
 */
export default class WidgetExt {

    /**
     * 重置节点上的widget属性
     * （若无widget，则默认添加一个widget）
     * @param node 需要处理的节点
     * @param p 布局参数
     */
    static reset(node: Node, p: IAlignParam) {
        if (!node || !node.isValid || !p) return;

        const widget: Widget = node.getComponent(Widget) || node.addComponent(Widget);
        widget.enabled = true;
        // alignMode
        widget.alignMode = p.alignMode == undefined ? Widget.AlignMode.ON_WINDOW_RESIZE : p.alignMode;

        // Vertical 纵向布局
        const isVCenter: boolean = p.vCenter != undefined || (p.top == undefined && p.bottom == undefined);
        widget.isAlignVerticalCenter = isVCenter;
        if (isVCenter) {
            widget.verticalCenter = p.vCenter || 0;
        }
        else {
            const isTop: boolean = p.top != undefined;
            widget.isAlignTop = isTop;
            if (isTop) {
                widget.top = p.top;
            }

            const isBottom: boolean = p.bottom != undefined;
            widget.isAlignBottom = isBottom;
            if (isBottom) {
                widget.bottom = p.bottom;
            }
        }

        // Horizontal 横向布局
        const isHCenter: boolean = p.hCenter != undefined || (p.left == undefined && p.right == undefined);
        widget.isAlignHorizontalCenter = isHCenter;
        if (isHCenter) {
            widget.horizontalCenter = p.hCenter || 0;
        }
        else {
            const isLeft: boolean = p.left != undefined;
            widget.isAlignLeft = isLeft;
            if (isLeft) {
                widget.left = p.left;
            }

            const isRight: boolean = p.right != undefined;
            widget.isAlignRight = isRight;
            if (isRight) {
                widget.right = p.right;
            }
        }
    }

}

/**
 * widget 对齐参数封装 以像素为参数
 */
export interface IAlignParam {
    /// 布局模式 (默认：Widget.AlignMode.ON_WINDOW_RESIZE)
    alignMode?: Widget.AlignMode;

    /// Vertical 纵向布局 （默认：居中对齐）
    // vCenter （设置该参数，必定居中对齐）
    vCenter?: number;
    // top && bottom
    top?: number;
    bottom?: number;

    /// Horizontal 横向布局 （默认：居中对齐）
    // hCenter （设置该参数，必定居中对齐）
    hCenter?: number;
    // left && right
    left?: number;
    right?: number;
}
